'##############
'Brake Script
'##############

'Controls Brakes and includes air system (compressor)

'(c) 2007-2011 Rüdiger Hülsmann, Marcel Kuhnt

'Script Version: 1.0
'Omsi release: 1.0

'Needs:
'- Engine (for compressor)

'Revision History:
'- Rüdiger Hülsmann   11.05.2009   Last Change
'- Rüdiger Hülsmann   15.03.2010   Brake squeak
'- Marcel Kuhnt      15.04.2010   Pressure Calculation Stabilized
'- Rüdiger Hülsmann   06.11.2010   Automatic level control
'- Marcel Kuhnt      28.12.2010   Added wheel separated brake force variables
'- Rüdiger Hülsmann   01.01.2011   Added ABS function
'- Rüdiger Hülsmann   06.01.2011   separated brake force debugged (pipe diameter)
'- Rüdiger Hülsmann   23.01.2011   ABS relais sound
'- Rüdiger Hülsmann   31.01.2011   Random initial pressure, nonreturn valves for air suspension
'- Rüdiger Hülsmann   03.02.2011   Random squeak sound volume

'--------------------------------------------------------------


{trigger:parking_brake_toggle}
   (L.L.bremse_feststell) ! (S.L.bremse_feststell) (S.L.bremse_feststell_sw)
   {if}
      (T.L.ev_bremse_feststell_ein)
   {else}
      (T.L.ev_bremse_feststell_aus)
   {endif}
{end}


{trigger:parking_brake_set}
   (L.L.bremse_feststell) !
   {if}
      (S.L.bremse_feststell)
      (T.L.ev_bremse_feststell_ein)
      1 (S.L.bremse_feststell_sw)
   {endif}
{end}

{trigger:parking_brake_release}
   (L.L.bremse_feststell)
   {if}
      ! (S.L.bremse_feststell)
      (T.L.ev_bremse_feststell_aus)
      0 (S.L.bremse_feststell_sw)
   {endif}
{end}

{trigger:parking_brake_mouse_drag}
   (L.S.mouse_y) 200 / (L.L.bremse_feststell_sw) + (S.L.bremse_feststell_sw) s0
   l0 0 <
   {if}
      0 (S.L.bremse_feststell_sw)
   {endif}
   l0 1 >
   {if}
      1 (S.L.bremse_feststell_sw)
   {endif}
   l0 0.6 > (L.L.bremse_feststell) 0 = &&
   {if}
      1 (S.L.bremse_feststell)
      (T.L.ev_bremse_feststell_ein)
   {endif}
   l0 0.4 < (L.L.bremse_feststell) 1 = &&
   {if}
      0 (S.L.bremse_feststell)
      (T.L.ev_bremse_feststell_aus)
   {endif}

   1 (S.L.bremse_feststell_klinke)
{end}

{trigger:parking_brake_mouse_off}
   0 (S.L.bremse_feststell_klinke)
{end}



'----------------------
'   Init
'----------------------

{macro:bremse_init}
   1 (S.L.bremse_feststell_sw) (S.L.bremse_feststell) (S.L.bremse_UeVentil_1) (S.L.bremse_UeVentil_2)

'   900000 (S.L.bremse_p_tank01) (S.L.bremse_p_tank02) (S.L.bremse_p_tank03) (S.L.bremse_p_tank04) (S.L.bremse_p_leitung01) (S.L.bremse_p_leitung02)


'Kreis 1 zufällig befüllen
   500000 random 400000 + (S.L.bremse_p_tank01) (S.L.bremse_p_leitung01) (S.L.bremse_p_leitung02) s0

'Kreis 2 in Abhängigkeit vom Druck in Kreis 1 befüllen: Wenn Druckausgleich vorhanden, dann p2=p1 ansonsten Zufallswert unterhalb des Sicherungsdrucks (5 bar)
   (C.L.bremse_UeVentil_1_schliessdruck) >
   {if}
      l0 (S.L.bremse_p_tank02)
   {else}
      300000 random 300000 + (S.L.bremse_p_tank02)
   {endif}

'Kreis 3 zufällig befüllen, aber mindestens Druck wie in Kreis
   500000 random 400000 + l0 max (S.L.bremse_p_tank03) s0

'Kreis 4 in Abhängigkeit vom Druck in Kreis 3 befüllen: Wenn Druckausgleich vorhanden, dann p4=p3 ansonsten Zufallswert unterhalb des Sicherungsdrucks (5 bar)
   (C.L.bremse_UeVentil_2_schliessdruck) >
   {if}
      l0 (S.L.bremse_p_tank04)
   {else}
      300000 random 300000 + (S.L.bremse_p_tank04) s0
   {endif}

'Setzen der Luftfederbalgdrücke

   300000 random 100000 + (S.L.bremse_p_balg_0_R)
   300000 random 100000 + (S.L.bremse_p_balg_0_L)
   300000 random 100000 + (S.L.bremse_p_balg_1_R)
   300000 random 100000 + (S.L.bremse_p_balg_1_L)


'Setzen der Bremszylinderdrücke   
   100000 (S.L.bremse_p_luft) (S.L.bremse_p_brzyl_VA) (S.L.bremse_p_brzyl_VA_R) (S.L.bremse_p_brzyl_VA_L) (S.L.bremse_p_brzyl_HA) (S.L.bremse_p_brzyl_HA_R) (S.L.bremse_p_brzyl_HA_L) (S.L.bremse_p_Brzyl_FBA)


   0 (S.L.bremse_loesezischbereitschaft) (S.L.bremse_bremszischbereitschaft) (S.L.bremse_zieldruckdifferenz)
   
   0 (L.L.bremse_loesezischzeit)
   
' Setzen des Initial-Hup/Quietschvolumes

   -2 (S.L.bremse_quietsch_volume)
{end}

'----------------------
'   Frame
'----------------------

{macro:bremse_frame}
   

'Bremskraftberechnung Vorderachse
'Rechte Seite
   (L.L.bremse_p_brzyl_VA_R) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * s0

'   Luftwiderstand:
   (L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 9.5 0.8 0.6 * * * +
'   Gesamtbremskraft auf 4 Räder aufteilen
   4 /
   (S.L.Axle_Brakeforce_0_R)

'Linke Seite
   (L.L.bremse_p_brzyl_VA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * s0

'   Luftwiderstand:
   (L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 9.5 0.8 0.6 * * * +
'   Gesamtbremskraft auf 4 Räder aufteilen
   4 /
   (S.L.Axle_Brakeforce_0_L)


'Bremskraftberechnung Hinterachse
'Rechte Seite
   (L.L.bremse_p_brzyl_HA_R) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * s0

'   Luftwiderstand:
   (L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 9.5 0.8 0.6 * * * +
'   Gesamtbremskraft auf 4 Räder aufteilen
   4 /
'   Feststellbremse obendrauf
   (L.L.bremse_p_Brzyl_FBA) (F.L.Bremskraft_FBA) 2 / +
   (S.L.Axle_Brakeforce_1_R)

'Linke Seite
   (L.L.bremse_p_brzyl_HA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * s0

'   Luftwiderstand:
   (L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 9.5 0.8 0.6 * * * +
'   Gesamtbremskraft auf 4 Räder aufteilen
   4 /
'   Feststellbremse obendrauf
   (L.L.bremse_p_Brzyl_FBA) (F.L.Bremskraft_FBA) 2 / +
   (S.L.Axle_Brakeforce_1_L)



   (M.L.bremse_kompressor)
   
   (M.L.bremse_druckluftsound)
   (L.L.bremse_halte)
     1 (S.L.bremse_kneel)
{else}
0 (S.L.bremse_kneel)
   {endif}

   (L.L.bremse_kneel) 1 =
      {if}   
      (M.L.kneel)
      {else}
      (M.L.bremse_levelcontrol)
   {endif}


'   Setzen des Bremssollwertes (Pedalbetätigungen bis 0.1 bleiben unberücksichtigt => Rasten für Retarder)
   
   (L.L.Brake) 0.1 - 1.1 * s0 0 <
   {if}
      0 (S.L.bremse_luft)
   {else}
      l0 (S.L.bremse_luft)
   {endif}
   

{end}
{macro:kneel}


(L.L.bremse_halte)
{if}
 
  (L.L.Axle_Springfactor_0_R) (L.S.Timegap) 0.15 * - 0.6 max (S.L.Axle_Springfactor_0_R)
  (L.L.Axle_Springfactor_0_R) 0.6 =
  {if}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * - 0.6 max (S.L.Axle_Springfactor_1_R)
  {endif}
  {else}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * + 1 min (S.L.Axle_Springfactor_1_R)

  (L.L.Axle_Springfactor_0_R) 1 =
  {if}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * + 1 min (S.L.Axle_Springfactor_1_R)
 
  {endif}

{endif}
{end}
{macro:bremse_kompressor}

'   Berechnung des Massenstroms vom Kompressor in die Füllleitung zum Vierkreisschutzventil:

   (L.L.bremse_kompressor) 1 =
   {if}
      (L.L.engine_n) (L.S.Timegap) * 60 / (C.L.bremse_m_kompressor) *
      (C.L.RT_Luft) * (C.L.bremse_V_leitung01) / (L.L.bremse_p_leitung01) + (S.L.bremse_p_leitung01)
   {endif}


'#################################################################
'   Vierkreisschutzventil

'   Berechnung der Querschnittsfläche der Überströmventile in Abhängigkeit der anliegenden Drücke von Bremskreis und Füllleitung:

   
   (C.L.bremse_UeVentil_1_oeffnungsdruck) (C.L.bremse_UeVentil_1_schliessdruck) - (C.L.bremse_UeVentil_1_schliessdruck) / (L.L.bremse_p_Tank01) * (L.L.bremse_p_leitung01) + (C.L.bremse_UeVentil_1_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_1)

   (C.L.bremse_UeVentil_2_oeffnungsdruck) (C.L.bremse_UeVentil_2_schliessdruck) - (C.L.bremse_UeVentil_2_schliessdruck) / (L.L.bremse_p_Tank02) * (L.L.bremse_p_leitung01) + (C.L.bremse_UeVentil_2_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_2)

   (C.L.bremse_UeVentil_3_oeffnungsdruck) (C.L.bremse_UeVentil_3_schliessdruck) - (C.L.bremse_UeVentil_3_schliessdruck) / (L.L.bremse_p_Tank03) * (L.L.bremse_p_leitung02) + (C.L.bremse_UeVentil_3_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_3)

   (C.L.bremse_UeVentil_4_oeffnungsdruck) (C.L.bremse_UeVentil_4_schliessdruck) - (C.L.bremse_UeVentil_4_schliessdruck) / (L.L.bremse_p_Tank04) * (L.L.bremse_p_leitung02) + (C.L.bremse_UeVentil_4_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_4)

'#################################################################
'   Testleck in Kreis 2 beim Betätigen des Warnblinkers:

'   (L.L.lights_sw_warnblinker)
'   {if}
'      (L.L.bremse_p_Tank02) s1
'      (L.L.bremse_p_luft) s2
'      (C.L.bremse_V_Tank02) s3
'      1000000 s4
'      (C.L.bremse_A_Leck) s5
'
'      (M.L.bremse_druckausgleich)
'
'      l1 (S.L.bremse_p_Tank02)
'   {endif}
'
'   Testleck in Kreis 3 beim Betätigen der Hupe:
'
'   (L.L.cockpit_hupe)
'   {if}
'      (L.L.bremse_p_Tank03) s1
'      (L.L.bremse_p_luft) s2
'      (C.L.bremse_V_Tank03) s3
'      1000000 s4
'      (C.L.bremse_A_Leck) s5
'
'      (M.L.bremse_druckausgleich)
'
'      l1 (S.L.bremse_p_Tank03)
'   {endif}

'#################################################################   
'Kreise 1+2
'#################################################################   

'   Druckausgleich in Bremskreis 1 und 2 bei geöffneten Überstromventilen 1 und 2:

   (L.L.bremse_A_UeVentil_1) 0 > (L.L.bremse_A_UeVentil_2) 0 > &&
   {if}
   
      (L.L.bremse_p_Tank01) s1
      (L.L.bremse_p_Tank02) s2
      (C.L.bremse_V_Tank01) s3
      (C.L.bremse_V_Tank02) s4
      (L.L.bremse_A_UeVentil_1) (L.L.bremse_A_UeVentil_2) min s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Tank01)
      l2 (S.L.bremse_p_Tank02)

   {endif}


'   Befüllen von Bremskreis 1, mit Rückschlagventil gesichert

   (L.L.bremse_A_UeVentil_1) 0 > (L.L.bremse_p_leitung01) (L.L.bremse_p_Tank01) > &&

   {if}

'      Druckausgleich Füllleitung - Bremskreis 1:
      
      (L.L.bremse_p_leitung01) s1
      (L.L.bremse_p_Tank01) s2
      (C.L.bremse_V_leitung01) s3
      (C.L.bremse_V_Tank01) s4
      (L.L.bremse_A_UeVentil_1) s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_leitung01)
      l2 (S.L.bremse_p_Tank01)


   {endif}   

'   Befüllen von Bremskreis 2, mit Rückschlagventil gesichert

   (L.L.bremse_A_UeVentil_2) 0 > (L.L.bremse_p_leitung01) (L.L.bremse_p_Tank02) > &&
   {if}

'      Druckausgleich Füllleitung - Bremskreis 2:

      (L.L.bremse_p_leitung01) s1
      (L.L.bremse_p_Tank02) s2
      (C.L.bremse_V_leitung01) s3
      (C.L.bremse_V_Tank02) s4
      (L.L.bremse_A_UeVentil_2) s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_leitung01)
      l2 (S.L.bremse_p_Tank02)
      

   {endif}

'#################################################################   
'Kreise 3+4
'#################################################################   

'Füllen der Fülleitung für die Kreise 3+4 aus den Behältern 1 und 2 (jeweils dem mit dem höheren Druck), mit Rückschlagventil gesichert:


   (L.L.bremse_p_Tank01) (L.L.bremse_p_Tank02) >
   {if}
      
      (L.L.bremse_p_Tank01) (L.L.bremse_p_leitung02) >
      {if}
'         Druckausgleich Bremskreis 1 - Füllleitung Kreis 3+4

         (L.L.bremse_p_Tank01) s1
         (L.L.bremse_p_leitung02) s2
         (C.L.bremse_V_Tank01) s3
         (C.L.bremse_V_leitung02) s4
         (C.L.bremse_A_Rueckschlagventil_1) s5   
      
         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank01)
         l2 (S.L.bremse_p_leitung02)
      {endif}
   {else}   
      (L.L.bremse_p_Tank02) (L.L.bremse_p_leitung02) >
      {if}

'         Druckausgleich Bremskreis 2 - Füllleitung Kreis 3+4
      
         (L.L.bremse_p_Tank02) s1
         (L.L.bremse_p_leitung02) s2
         (C.L.bremse_V_Tank02) s3
         (C.L.bremse_V_leitung02) s4
         (C.L.bremse_A_Rueckschlagventil_1) s5   
      
         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank02)
         l2 (S.L.bremse_p_leitung02)
      {endif}
   {endif}


   
'   Druckausgleich in Bremskreis 3 und 4 bei geöffneten Überstromventilen 3 und 4:

   (L.L.bremse_A_UeVentil_3) 0 > (L.L.bremse_A_UeVentil_4) 0 > &&
   {if}
   
      (L.L.bremse_p_Tank03) s1
      (L.L.bremse_p_Tank04) s2
      (C.L.bremse_V_Tank03) s3
      (C.L.bremse_V_Tank04) s4
      (L.L.bremse_A_UeVentil_3) (L.L.bremse_A_UeVentil_4) min s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Tank03)
      l2 (S.L.bremse_p_Tank04)

   {endif}



'   Befüllen von Bremskreis 3, mit Rückschlagventil gesichert

   (L.L.bremse_A_UeVentil_3) 0 > (L.L.bremse_p_leitung02) (L.L.bremse_p_Tank03) > &&

   {if}

'      Druckausgleich Füllleitung - Bremskreis 1:
      
      (L.L.bremse_p_leitung02) s1
      (L.L.bremse_p_Tank03) s2
      (C.L.bremse_V_leitung02) s3
      (C.L.bremse_V_Tank03) s4
      (L.L.bremse_A_UeVentil_3) s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_leitung02)
      l2 (S.L.bremse_p_Tank03)


   {endif}   

'   Befüllen von Bremskreis 4, mit Rückschlagventil gesichert

   (L.L.bremse_A_UeVentil_4) 0 > (L.L.bremse_p_leitung02) (L.L.bremse_p_Tank04) > &&
   {if}

'      Druckausgleich Füllleitung - Bremskreis 2:

      (L.L.bremse_p_leitung02) s1
      (L.L.bremse_p_Tank04) s2
      (C.L.bremse_V_leitung02) s3
      (C.L.bremse_V_Tank04) s4
      (L.L.bremse_A_UeVentil_4) s5   
      
      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_leitung02)
      l2 (S.L.bremse_p_Tank04)
      

   {endif}
'#########################################################################


'   Haltestellenbremse
'   Setzen des Zieldruckes

   (L.L.bremse_halte)
   {if}
      (C.L.bremse_pmax_halte) (L.L.bremse_p_Tank01) min (S.L.bremse_zieldruck_halte)
   {else}
      100000 (S.L.bremse_zieldruck_halte)
   {endif}   


'   Setzen des Zieldrucks der Betriebsbremse für Kreis 1 (HA)

   (L.L.bremse_luft) (L.L.bremse_p_tank01) * 1.1 * 100000 + (S.L.bremse_zieldruck_BBA)


'   Setzen des Bremszylinderzieldruckes HA (Fuß- und Haltestellenbremse):
   
   (L.L.bremse_zieldruck_BBA) (L.L.bremse_zieldruck_halte) max (S.L.bremse_zieldruck_HA) (S.L.bremse_zieldruck_HA_R) (S.L.bremse_zieldruck_HA_L)

'   Setzen des Zustands des Wechselventils Fußbremse <> Haltestellenbremse
'   0 = Fußbremse, 1= Haltestellenbremse
   
   (L.L.bremse_zieldruck_BBA) (L.L.bremse_p_brzyl_HA) >
   {if}
      0 (S.L.bremse_wechselventil_HA)
   {endif}
   
      (L.L.bremse_zieldruck_halte) (L.L.bremse_zieldruck_BBA) >
   {if}
      1 (S.L.bremse_wechselventil_HA)
   {endif}



'   Setzen des Bremszylinderzieldruckes VA:
   
   (L.L.bremse_luft) (L.L.bremse_p_tank02) * 1.1 * 100000 +  (S.L.bremse_zieldruck_VA) (S.L.bremse_zieldruck_VA_R) (S.L.bremse_zieldruck_VA_L)


'   Setzen des Bremszylinderzieldruckes FBA (mit Überlastschutz)


   1 (L.L.bremse_feststell_sw) - (L.L.bremse_p_tank03) * 1.1 * 100000 + s1
   
   (L.L.bremse_zieldruck_HA) l1 max (S.L.bremse_zieldruck_FBA)



'   ABS-Regelung

'   Ist ABS überhaupt vorhanden und aktiv?


   (C.L.bremse_ABS) (L.L.elec_busbar_main) &&
   
   {if}
'      Berechnen der Referenzdrehzahl
'      Umrechnungsfaktor Geschwindigkeit (km/h) auf Raddrehzahl (1/min) = 5.64 bei Raddurchmesser 94cm

      (L.L.Velocity_Ground) 5.64 * (S.L.bremse_ABS_referenzdrehzahl) s0

'      Übersteigt die Drehzahldifferenz einen kritischen Wret, dann den entsprechenden Bremszylinder entlüften
      
      l0 (L.L.Wheel_RotationSpeed_0_R) - 10 >
      (L.L.Velocity_Ground) 6 > &&
      {if}
         (L.L.bremse_ABS_eingriff_0R) !
         {if}
            (T.L.ev_bremse_ABS_0R_on)
         {endif}
         100000 (S.L.bremse_zieldruck_VA_R)
         1 (S.L.bremse_ABS_eingriff_0R)
      {else}
         (L.L.bremse_ABS_eingriff_0R)
         {if}
            (T.L.ev_bremse_ABS_0R_off)
         {endif}
         0 (S.L.bremse_ABS_eingriff_0R)
      {endif}

      l0 (L.L.Wheel_RotationSpeed_0_L) - 10 >
      (L.L.Velocity_Ground) 6 > &&
      {if}
         (L.L.bremse_ABS_eingriff_0L) !
         {if}
            (T.L.ev_bremse_ABS_0L_on)
         {endif}
         100000 (S.L.bremse_zieldruck_VA_L)
         1 (S.L.bremse_ABS_eingriff_0L)
      {else}
         (L.L.bremse_ABS_eingriff_0L)
         {if}
            (T.L.ev_bremse_ABS_0L_off)
         {endif}
         0 (S.L.bremse_ABS_eingriff_0L)
      {endif}

      l0 (L.L.Wheel_RotationSpeed_1_R) - 10 >
      (L.L.Velocity_Ground) 6 > &&
      {if}
         (L.L.bremse_ABS_eingriff_1R) !
         {if}
            (T.L.ev_bremse_ABS_1R_on)
         {endif}
         100000 (S.L.bremse_zieldruck_HA_R)
         1 (S.L.bremse_ABS_eingriff_1R)
      {else}
         (L.L.bremse_ABS_eingriff_1R)
         {if}
            (T.L.ev_bremse_ABS_1R_off)
         {endif}
         0 (S.L.bremse_ABS_eingriff_1R)
      {endif}

      l0 (L.L.Wheel_RotationSpeed_1_L) - 10 >
      (L.L.Velocity_Ground) 6 > &&
      {if}
         (L.L.bremse_ABS_eingriff_1L) !
         {if}
            (T.L.ev_bremse_ABS_1L_on)
         {endif}
         100000 (S.L.bremse_zieldruck_HA_L)
         1 (S.L.bremse_ABS_eingriff_1L)
      {else}
         (L.L.bremse_ABS_eingriff_1L)
         {if}
            (T.L.ev_bremse_ABS_1L_off)
         {endif}
         0 (S.L.bremse_ABS_eingriff_1L)
      {endif}

      (L.L.bremse_ABS_eingriff_0R)
      (L.L.bremse_ABS_eingriff_0L) ||
      (L.L.bremse_ABS_eingriff_1R) ||
      (L.L.bremse_ABS_eingriff_1L) ||
      (L.L.bremse_ABS_selftest) ||
      (S.L.bremse_ABS_eingriff)

   {else}
      0 (S.L.bremse_ABS_eingriff)

   {endif}

'   ABS-Selbsttest erfolgreich bei V>6km/h
   (L.L.velocity) 6 > (L.L.bremse_ABS_selftest) &&
   {if}
      0 (S.L.bremse_ABS_selftest)
   {endif}

'   a1) Hinterachse rechts

'   Ist geforderter Bremsdruck höher als der aktuelle?
   (L.L.bremse_zieldruck_HA_R) (L.L.bremse_p_brzyl_HA_R) >
   {if}
      (L.L.bremse_zieldruck_HA_R) (L.L.bremse_p_brzyl_HA_R) - 20000000000 / (S.L.bremse_A_BrVentil_HA_R)

'      Berechnung des Massenstroms aus Behälter 1 zum Bremszylinder HA

      (L.L.bremse_p_Tank01) s1
      (L.L.bremse_p_Brzyl_HA_R) s2
      (C.L.bremse_V_tank01) s3
      (C.L.bremse_V_Brzyl_HA_R) s4

'      Ventilwahl abhängig von der Stellung des Wechselventils
      (L.L.bremse_wechselventil_HA)
      {if}
         (L.L.bremse_A_BrVentil_HA_R) 2 * s5
      {else}
         (L.L.bremse_A_BrVentil_HA_R) s5
      {endif}

      (M.L.bremse_druckausgleich)
      l1 (S.L.bremse_p_Tank01)
      l2 (S.L.bremse_p_Brzyl_HA_R)

   {else}
      (L.L.bremse_p_brzyl_HA_R) (L.L.bremse_zieldruck_HA_R) - sqrt 20000000 / (S.L.bremse_A_BrVentil_HA_R)

'      Berechnung des Massenstroms aus Bremszylinder HA ins Freie

      (L.L.bremse_p_Brzyl_HA_R) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_brzyl_HA_R) s3
      1 s4

'      Ventilwahl abhängig von der Stellung des Wechselventils
      (L.L.bremse_wechselventil_HA)
      {if}
         (L.L.bremse_A_BrVentil_HA_R) 2 * s5
      {else}
         (L.L.bremse_A_BrVentil_HA_R) s5
      {endif}

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Brzyl_HA_R)
      
   {endif}

'   a2) Hinterachse links

'   Ist geforderter Bremsdruck höher als der aktuelle?
   (L.L.bremse_zieldruck_HA_L) (L.L.bremse_p_brzyl_HA_L) >
   {if}
      (L.L.bremse_zieldruck_HA_L) (L.L.bremse_p_brzyl_HA_L) - 20000000000 / (S.L.bremse_A_BrVentil_HA_L)

'      Berechnung des Massenstroms aus Behälter 1 zum Bremszylinder HA

      (L.L.bremse_p_Tank01) s1
      (L.L.bremse_p_Brzyl_HA_L) s2
      (C.L.bremse_V_tank01) s3
      (C.L.bremse_V_Brzyl_HA_L) s4

'      Ventilwahl abhängig von der Stellung des Wechselventils
      (L.L.bremse_wechselventil_HA)
      {if}
         (L.L.bremse_A_BrVentil_HA_L) 2 * s5
      {else}
         (L.L.bremse_A_BrVentil_HA_L) s5
      {endif}

      (M.L.bremse_druckausgleich)
      l1 (S.L.bremse_p_Tank01)
      l2 (S.L.bremse_p_Brzyl_HA_L)

   {else}
      (L.L.bremse_p_brzyl_HA_L) (L.L.bremse_zieldruck_HA_L) - sqrt 20000000 / (S.L.bremse_A_BrVentil_HA_L)

'      Berechnung des Massenstroms aus Bremszylinder HA ins Freie

      (L.L.bremse_p_Brzyl_HA_L) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_brzyl_HA_L) s3
      1 s4

'      Ventilwahl abhängig von der Stellung des Wechselventils
      (L.L.bremse_wechselventil_HA)
      {if}
         (L.L.bremse_A_BrVentil_HA_L) 2 * s5
      {else}
         (L.L.bremse_A_BrVentil_HA_L) s5
      {endif}

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Brzyl_HA_L)
      
   {endif}

'   Bildung des Mittelwertes für weitere Berechnungen
   (L.L.bremse_p_Brzyl_HA_R) (L.L.bremse_p_Brzyl_HA_L) + 2 / (S.L.bremse_p_Brzyl_HA)

'   b1) Vorderachse rechts
'   Ist geforderter Bremsdruck höher als der aktuelle?

   (L.L.bremse_zieldruck_VA_R) (L.L.bremse_p_brzyl_VA_R) >
   {if}
      (L.L.bremse_zieldruck_VA_R) (L.L.bremse_p_brzyl_VA_R) - 20000000000 / (S.L.bremse_A_BrVentil_VA_R)

'      Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder VA

      (L.L.bremse_p_Tank02) s1
      (L.L.bremse_p_Brzyl_VA_R) s2
      (C.L.bremse_V_tank02) s3
      (C.L.bremse_V_Brzyl_VA_R) s4
      (L.L.bremse_A_BrVentil_VA_R) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Tank02)
      l2 (S.L.bremse_p_Brzyl_VA_R)

   {else}
      (L.L.bremse_p_brzyl_VA_R) (L.L.bremse_zieldruck_VA_R) - sqrt 20000000 / (S.L.bremse_A_BrVentil_VA_R)

'      Berechnung des Massenstroms aus Bremszylinder VA ins Freie
   
      (L.L.bremse_p_Brzyl_VA_R) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_brzyl_VA_R) s3
      1000000 s4
      (L.L.bremse_A_BrVentil_VA_R) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Brzyl_VA_R)
      
   {endif}

'   b2) Vorderachse links
'   Ist geforderter Bremsdruck höher als der aktuelle?

   (L.L.bremse_zieldruck_VA_L) (L.L.bremse_p_brzyl_VA_L) >
   {if}
      (L.L.bremse_zieldruck_VA_L) (L.L.bremse_p_brzyl_VA_L) - 20000000000 / (S.L.bremse_A_BrVentil_VA_L)

'      Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder VA

      (L.L.bremse_p_Tank02) s1
      (L.L.bremse_p_Brzyl_VA_L) s2
      (C.L.bremse_V_tank02) s3
      (C.L.bremse_V_Brzyl_VA_L) s4
      (L.L.bremse_A_BrVentil_VA_L) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Tank02)
      l2 (S.L.bremse_p_Brzyl_VA_L)

   {else}
      (L.L.bremse_p_brzyl_VA_L) (L.L.bremse_zieldruck_VA_L) - sqrt 20000000 / (S.L.bremse_A_BrVentil_VA_L)

'      Berechnung des Massenstroms aus Bremszylinder VA ins Freie
   
      (L.L.bremse_p_Brzyl_VA_L) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_brzyl_VA_L) s3
      1000000 s4
      (L.L.bremse_A_BrVentil_VA_L) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Brzyl_VA_L)
      
   {endif}

'   Bildung des Mittelwertes für weitere Berechnungen
   (L.L.bremse_p_Brzyl_VA_R) (L.L.bremse_p_Brzyl_VA_L) + 2 / (S.L.bremse_p_Brzyl_VA)

'   c) Federspeicherbremse
'   Ist geforderter Lösedruck höher als der aktuelle?

   (L.L.bremse_zieldruck_FBA) (L.L.bremse_p_brzyl_FBA) >
   {if}
      (L.L.bremse_zieldruck_FBA) (L.L.bremse_p_brzyl_FBA) - 10000000000 / (S.L.bremse_A_BrVentil_FBA)

'      Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder FBA

      (L.L.bremse_p_Tank03) s1
      (L.L.bremse_p_Brzyl_FBA) s2
      (C.L.bremse_V_tank03) s3
      (C.L.bremse_V_Brzyl_FBA) s4
      (L.L.bremse_A_BrVentil_FBA) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Tank03)
      l2 (S.L.bremse_p_Brzyl_FBA)

   {else}
      (L.L.bremse_p_brzyl_FBA) (L.L.bremse_zieldruck_FBA) - sqrt 10000000 / (S.L.bremse_A_BrVentil_FBA)

'      Berechnung des Massenstroms aus Bremszylinder FBA ins Freie
   
      (L.L.bremse_p_Brzyl_FBA) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_brzyl_FBA) s3
      1000000 s4
      (L.L.bremse_A_BrVentil_FBA) s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_Brzyl_FBA)
      
   {endif}






'   Überströmventile im Vierkreisschutzventil:


   (L.L.bremse_p_Tank01) (C.L.bremse_UeVentil_1_schliessdruck) < (L.L.bremse_UeVentil_1) &&
   {if}
      0 (S.L.bremse_UeVentil_1)
   {endif}
   (L.L.bremse_p_leitung01) (C.L.bremse_UeVentil_1_oeffnungsdruck) >
   {if}
      1 (S.L.bremse_UeVentil_1)
   {endif}


   (L.L.bremse_p_Tank02) (C.L.bremse_UeVentil_2_schliessdruck) < (L.L.bremse_UeVentil_2) &&
   {if}
      0 (S.L.bremse_UeVentil_2)
   {endif}   
   (L.L.bremse_p_leitung01) (C.L.bremse_UeVentil_2_oeffnungsdruck) >
   {if}
      1 (S.L.bremse_UeVentil_2)
   {endif}




'   Ein- und Abschaltdrücke des Druckreglers:

   (L.L.bremse_p_leitung01) 950000 > (L.L.bremse_kompressor) 1 = &&
   {if}
      (T.L.ev_kompressor_aus)
      0 (S.L.bremse_kompressor)
   {endif}

   (L.L.bremse_p_leitung01) 800000 <  (L.L.bremse_kompressor) 0 = &&
   {if}
      (T.L.ev_kompressor_ein)
      1 (S.L.bremse_kompressor)
   {endif}


   
{end}



{macro:bremse_levelcontrol}

'   Federweg Neutralposition: -0.105

'Vorne rechts

   (C.L.bremse_level_setpoint) (L.L.Axle_Suspension_0_R) >
   {if}
'      Rückschlagventil der Luftfederung:
      (L.L.bremse_p_Tank04) (L.L.bremse_p_balg_0_R) >
      {if}
'         Berechnung des Massenstroms aus Behälter 4 zum Federbalg 0 R

         (L.L.bremse_p_Tank04) s1
         (L.L.bremse_p_balg_0_R) s2
         (C.L.bremse_V_tank04) s3
         (C.L.bremse_V_balg_0_R) s4
         (L.L.Axle_Suspension_0_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank04)
         l2 (S.L.bremse_p_balg_0_R) 460000 / 0.5 max (S.L.Axle_Springfactor_0_R)
      {endif}
   {else}
'      Berechnung des Massenstroms aus Federbalg 0 R ins Freie

      (L.L.bremse_p_balg_0_R) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_balg_0_R) s3
      1000000 s4
      (L.L.Axle_Suspension_0_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_balg_0_R) 460000 / 0.5 max (S.L.Axle_Springfactor_0_R)
   {endif}

'Vorne links

   (C.L.bremse_level_setpoint) (L.L.Axle_Suspension_0_L) >
   {if}   
'      Rückschlagventil der Luftfederung:
      (L.L.bremse_p_Tank04) (L.L.bremse_p_balg_0_L) >
      {if}   
'         Berechnung des Massenstroms aus Behälter 4 zum Federbalg 0 L

         (L.L.bremse_p_Tank04) s1
         (L.L.bremse_p_balg_0_L) s2
         (C.L.bremse_V_tank04) s3
         (C.L.bremse_V_balg_0_L) s4
         (L.L.Axle_Suspension_0_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank04)
         l2 (S.L.bremse_p_balg_0_L) 460000 / 0.5 max (S.L.Axle_Springfactor_0_L)
      {endif}
   {else}
'      Berechnung des Massenstroms aus Federbalg 0 L ins Freie

      (L.L.bremse_p_balg_0_L) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_balg_0_L) s3
      1000000 s4
      (L.L.Axle_Suspension_0_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_balg_0_L) 460000 / 0.5 max (S.L.Axle_Springfactor_0_L)
   {endif}


'Hinten rechts

   (C.L.bremse_level_setpoint) (L.L.Axle_Suspension_1_R) >
   {if}
'      Rückschlagventil der Luftfederung:
      (L.L.bremse_p_Tank04) (L.L.bremse_p_balg_1_R) >
      {if}
'         Berechnung des Massenstroms aus Behälter 4 zum Federbalg 1 R

         (L.L.bremse_p_Tank04) s1
         (L.L.bremse_p_balg_1_R) s2
         (C.L.bremse_V_tank04) s3
         (C.L.bremse_V_balg_1_R) s4
         (L.L.Axle_Suspension_1_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank04)
         l2 (S.L.bremse_p_balg_1_R) 460000 / 0.5 max (S.L.Axle_Springfactor_1_R)
      {endif}
   {else}
'      Berechnung des Massenstroms aus Federbalg 0 R ins Freie

      (L.L.bremse_p_balg_1_R) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_balg_1_R) s3
      1000000 s4
      (L.L.Axle_Suspension_1_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_balg_1_R) 460000 / 0.5 max (S.L.Axle_Springfactor_1_R)
   {endif}

'Vorne links

   (C.L.bremse_level_setpoint) (L.L.Axle_Suspension_1_L) >
   {if}   
'      Rückschlagventil der Luftfederung:
      (L.L.bremse_p_Tank04) (L.L.bremse_p_balg_1_L) >
      {if}   
'         Berechnung des Massenstroms aus Behälter 4 zum Federbalg 1 L

         (L.L.bremse_p_Tank04) s1
         (L.L.bremse_p_balg_1_L) s2
         (C.L.bremse_V_tank04) s3
         (C.L.bremse_V_balg_1_L) s4
         (L.L.Axle_Suspension_1_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

         (M.L.bremse_druckausgleich)

         l1 (S.L.bremse_p_Tank04)
         l2 (S.L.bremse_p_balg_1_L) 460000 / 0.5 max (S.L.Axle_Springfactor_1_L)
      {endif}
   {else}
'      Berechnung des Massenstroms aus Federbalg 0 L ins Freie

      (L.L.bremse_p_balg_1_L) s1
      (L.L.bremse_p_luft) s2
      (C.L.bremse_V_balg_1_L) s3
      1000000 s4
      (L.L.Axle_Suspension_1_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

      (M.L.bremse_druckausgleich)

      l1 (S.L.bremse_p_balg_1_L) 460000 / 0.5 max (S.L.Axle_Springfactor_1_L)
   {endif}

'##################TESTKRAM####################################

'   (L.L.cockpit_hupe)
'   {if}
'      100000 (S.L.bremse_p_balg_0_R) (S.L.bremse_p_balg_0_L) (S.L.bremse_p_balg_1_R) (S.L.bremse_p_balg_1_L)
'   {endif}
'
'   (L.L.Axle_Springfactor_0_R) 10.97 * (S.L.gesamtmasse)

'##################/TESTKRAM####################################


{end}


{macro:bremse_druckausgleich}
   
'   l1   Druck im Behälter 1
'   l2   Druck im Behälter 2
'   l3   Volumen Behälter 1
'   l4   Volumen Behälter 2
'   l5   Querschnittsfläche Verbindungsleitung
'...
'   l6   temporäre Variable, die die maximale Zeitkonstante enthält

   l1 l2 + 2 / l1 l2 - s0 * (C.L.RT_Luft) / abs sqrt l0 sgn * l5 * (C.L.RT_Luft) * s0

   l1 l2 - 1 l3 / 1 l4 / + l0 * / s6

   (L.S.Timegap) l6 min  l0    * l4 / l2 + s2
   (L.S.Timegap) l6 min  l0 /-/ * l3 / l1 + s1
{end}

{macro:bremse_druckluftsound}

'   Setzen der Druckdifferenz zur entsprechenden Sounduntermalung:

   (L.L.bremse_zieldruck_VA) (L.L.bremse_p_brzyl_VA) - s1
   (L.L.bremse_wechselventil_HA) !
   {if}
      (L.L.bremse_zieldruck_HA) (L.L.bremse_p_brzyl_HA) - s2
   {else}
      0 s2
   {endif}
   l1 l2 min (S.L.bremse_zieldruckdifferenz)


   (L.L.bremse_p_brzyl_VA) (L.L.bremse_last_p_Brzyl) max s1
   (L.L.bremse_wechselventil_HA) !
   {if}
      (L.L.bremse_p_brzyl_HA) (L.L.bremse_last_p_brzyl) max s2
   {else}
      0 s2
   {endif}
   l1 l2 max (S.L.bremse_last_p_Brzyl)




   (L.L.bremse_zieldruckdifferenz) -40000 <
   {if}
      (L.L.bremse_loesezischbereitschaft) (L.L.bremse_loesezischzeit) 0.6 > &&
      {if}
         (L.L.bremse_last_p_Brzyl) (S.L.bremse_zischvolume)
         (T.L.ev_loesezischen)
         0 (S.L.bremse_loesezischzeit)
      {endif}
      0 (S.L.bremse_loesezischbereitschaft)
   {else}
      (L.L.bremse_loesezischbereitschaft) !
      {if}
         1 (S.L.bremse_loesezischbereitschaft)
         (L.L.bremse_p_brzyl_VA) s1
         (L.L.bremse_wechselventil_HA) !
         {if}
            (L.L.bremse_p_brzyl_HA) s2
         {endif}
            l1 l2 max (S.L.bremse_last_p_Brzyl)
      {endif}
'      Inkrementierung der vergangenen Zeit seit letztem Lösezischen:
      (L.L.bremse_loesezischzeit) (L.S.Timegap) + (S.L.bremse_loesezischzeit)
   {endif}


   (L.L.bremse_zieldruckdifferenz) 100000 >
   {if}
      (L.L.bremse_bremszischbereitschaft)
      {if}
         (T.L.ev_bremszischen)
      {endif}
      0 (S.L.bremse_bremszischbereitschaft)
   {else}
      1 (S.L.bremse_bremszischbereitschaft)
   {endif}


'   Bremshupen Hinterachse
'   Bestimmen der Gesamtlautstärke je nach Wagennummer:
   (L.L.bremse_quietsch_volume) -1.5 <
   {if}
      (L.$.number) $StrToFloat 1000 * sin (S.L.bremse_quietsch_volume)
   {endif}

'   Triggern des Sounds jach Radumdrehung:
   (L.L.Wheel_Rotation_1_R) 6.28318 / (L.L.Wheel_Rotation_1_R) 6.28318 / trunc - 0.5 >
   {if}
      (L.L.bremse_hupsound) !
      {if}   
         (T.L.ev_bremse_hup)
         1 (S.L.bremse_hupsound)
      {endif}
   {else}
      0 (S.L.bremse_hupsound)
   {endif}


{end}

(L.L.bremse_halte)
{if}
 
  (L.L.Axle_Springfactor_0_R) (L.S.Timegap) 0.15 * - 0.6 max (S.L.Axle_Springfactor_0_R)
  (L.L.Axle_Springfactor_0_R) 0.6 =
  {if}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * - 0.6 max (S.L.Axle_Springfactor_1_R)
  {endif}
  {else}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * + 1 min (S.L.Axle_Springfactor_1_R)

  (L.L.Axle_Springfactor_0_R) 1 =
  {if}
  (L.L.Axle_Springfactor_1_R) (L.S.Timegap) 0.15 * + 1 min (S.L.Axle_Springfactor_1_R)
 
  {endif}

{endif}
{end}